#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
const int maxl = 1e6 + 6;
struct car{
    int d,v,a;
}dat[maxn];
struct ran{
    int l,r;
}rge[maxn];
bool cmp(ran a,ran b){
    if(a.l!=b.l) return a.l<b.l;
    else return a.r<b.r;
}
int sum1[maxn],sum2[maxn],maxp=-1;
int flag1=1,flag2=1,flag3=1;
int V,L,n,m,T,cnt,ans;
int mem[maxl];
int calc(int v,int d,int a){
    if(a==0){
        if(v<=V) return -1;
        else return d;
    }
    else{
        int up = V*V-v*v;
        int down = 2*a;
        int s = up/down;
        if(s<0) return -1;
        if(s>L-d) return -1;
        if(a>0) return d+s+1;
        return d+s;
    }
}
int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    cin>>T;
    for(int u=1;u<=T;u++){
        cnt=0,ans=0;
        cin>>n>>m>>L>>V;
        for(int i=1;i<=n;i++){
            cin>>dat[i].d>>dat[i].v>>dat[i].a;
            if(dat[i].a!=0) flag1 = 0;
            if(dat[i].a>0) flag2 = 0;
            if(dat[i].a<0) flag3 = 0;
        }
        for(int i=1;i<=m;i++){
            int p;
            cin>>p;
            sum1[p]=1;
            maxp=max(maxp,p);
        }
        for(int i=0;i<=maxp;i++){
            if(i==0) sum2[i]=sum1[i];
            else sum2[i]=sum2[i-1]+sum1[i];
        }
        if(flag1==1){
            int ans=0;
            for(int i=1;i<=n;i++){
                if(dat[i].v>V){
                    if(sum2[L]-sum2[dat[i].d-1]==0) continue;
                    else{
                        rge[++cnt].l=dat[i].d;
                        rge[cnt].r=L;
                        ans++;
                    }
                } 
        }
        cout<<ans<<' '<<m-1<<'\n';
        }
        else if(flag2==1){
            for(int i=1;i<=n;i++){
                if(calc(dat[i].v,dat[i].d,dat[i].a)==-1){
                    continue;
                }
                else{
                    if(sum2[L]-sum2[calc(dat[i].v,dat[i].d,dat[i].a)-1]==0) continue;
                    else{
                        rge[++cnt].l=calc(dat[i].v,dat[i].d,dat[i].a);
                        rge[cnt].r=L;
                        ans++;
                    }
                }
            }
            cout<<ans<<' '<<m-1<<'\n';
        }
        else cout<<n<<' '<<0<<'\n';
}
}